﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using EvertonApp.Transporte;

namespace EvertonApp.AdminWeb.Controllers.Proxy
{
    public enum Tipo
    {
        NOTICIA,
        EVENTO,
        HILO
    }

    public class PostProxy
    {

        private HiloProxy _hiloProxy;
        private EventoProxy _eventoProxy;
        private NoticiaProxy _noticiaProxy;

        public PostProxy()
        {
             _hiloProxy = new HiloProxy();
             _eventoProxy = new EventoProxy();
             _noticiaProxy = new NoticiaProxy();
        }

        public IList<IPosteable> Get()
        {
            IEnumerable<IPosteable> listaAux = _hiloProxy.Get().Concat<IPosteable>(_eventoProxy.Get());
            IEnumerable<IPosteable> listaRespuesta = listaAux.Concat<IPosteable>(_noticiaProxy.Get());

            return listaRespuesta.ToList();
        }

        public IPosteable Get(Guid id, Tipo tipo)
        {
            IPosteable respuesta;
            switch (tipo)
            {
                case Tipo.NOTICIA:
                    respuesta = _noticiaProxy.Get(id);
                    break;
                case Tipo.EVENTO:
                    respuesta = _eventoProxy.Get(id);
                    break;
                default:
                    respuesta = _hiloProxy.Get(id);
                    break;
            }
            return respuesta;
        }

        public IPosteable Post(IPosteable value, Tipo tipo)
        {

            IPosteable respuesta;
            switch (tipo)
            {
                case Tipo.NOTICIA:
                    respuesta = _noticiaProxy.Post((Noticia)value);
                    break;
                case Tipo.EVENTO:
                    respuesta = _eventoProxy.Post((Evento)value);
                    break;
                default:
                    respuesta = _hiloProxy.Post((Hilo)value);
                    break;
            }
            return respuesta;
        }

        public bool Put(Guid id, IPosteable value, Tipo tipo)
        {
            bool respuesta;
            switch (tipo)
            {
                case Tipo.NOTICIA:
                    respuesta = _noticiaProxy.Put(id, (Noticia)value);
                    break;
                case Tipo.EVENTO:
                    respuesta = _eventoProxy.Put(id, (Evento)value);
                    break;
                default:
                    respuesta = _hiloProxy.Put(id, (Hilo)value);
                    break;
            }
            return respuesta;
        }

        public bool Delete(Guid id, Tipo tipo)
        {
            bool respuesta;
            switch (tipo)
            {
                case Tipo.NOTICIA:
                    respuesta = _noticiaProxy.Delete(id);
                    break;
                case Tipo.EVENTO:
                    respuesta = _eventoProxy.Delete(id);
                    break;
                default:
                    respuesta = _hiloProxy.Delete(id);
                    break;
            }
            return respuesta;
        }

    }
}